#include <stdio.h>

/**
 * 给定100个人站成一圈，从第1个人开始依次报数。
 * 每数到3的人将会被淘汰，然后继续从下一个人开始报数。
 * 这个过程会一直持续，直到所有的人都被淘汰。
 * 请编写一个C语言程序来模拟这个过程，并且输出每一个被淘汰人的编号。
 * 要求：输出每一个被淘汰人的编号，每淘汰一个人输出一行，格式为："%d out \n"(每输出一次换行)
*/

#define ALL_NUM    	100 
#define COUNT_NUM	3
#define OUT_NUM		3

/* people id array such as (1,2,3,4,5,6) */
int people[ALL_NUM];
int b[ALL_NUM];
void josephu(int a[],int b[],int n,int m) {
    int num = n,last = 1,j = 0;
    while (num) {
        int i,cnt = 0;
        for(i = last; cnt != m; i++) {
            if(i > n) i %= n;
            if(a[i] == -1) continue;
            cnt++;
            if(cnt == m) {
                a[i] = -1;
                num--;
                last = i + 1;
                b[j++] = i;
                break;
            }
        }
    }
}
int main(void)
{
	for (int i = 0; i < 100; i++) {
		people[i] = i + 1;
	}
	
	josephu(people, b, 100, 3);

    for (int i = 0; i < 100; i++) {
        printf("%d out \n", b[i]);
    }

	return 0;
}
